/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package fase2.pt.iul.sid.database;

import fase2.pt.iul.sid.model.FotografiaModel;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Ricardo Marques
 */
public class FotografiaDAO {
    
    private FactoryConnection fc = null;
    private static String PATH_FOTOS_LOCATION;
    
    public FotografiaDAO(FactoryConnection fc, String PATH_FOTOS_LOCATION) {
    
        this.fc = fc;
        this.PATH_FOTOS_LOCATION = PATH_FOTOS_LOCATION;
        
    }
    
    public FotografiaModel getFotoPerfil(String email){
        
        FotografiaModel ret = null;
        
        int resultsetType =0;
        ConnectionHandler ch = new ConnectionHandler();
                
        try {
            fc.returnResultSetSelectStatement("SELECT f.idFotografia,f.idEstabelecimento,f.idPrato,f.localizacao, f.emailutilizador, u.nome FROM Fotografia f inner join Utilizador u on u.email=f.emailutilizador WHERE f.idEstabelecimento is NULL and f.idPrato is NULL and f.emailutilizador='"+email+"'", resultsetType, ch);

            if(ch.r!=null){
                if(ch.r.next()){
                    
                    ret = new FotografiaModel(ch.r.getInt("idFotografia"), PATH_FOTOS_LOCATION + "utilizadores\\" + ch.r.getString("localizacao"),ch.r.getString("emailutilizador"),ch.r.getString("nome"));
                    
                }
            }
            
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        return ret;
        
    }
    
    public List<FotografiaModel> getFotosPrato(int id_prato){
        
        List<FotografiaModel> ret = new LinkedList<>();
        
        int resultsetType =0;
        ConnectionHandler ch = new ConnectionHandler();
                
        try {
            
            fc.returnResultSetSelectStatement("SELECT f.idFotografia,f.idEstabelecimento,f.idPrato,f.localizacao, f.emailutilizador, u.nome FROM Fotografia f inner join Utilizador u on u.email=f.emailutilizador WHERE f.idPrato="+ id_prato, resultsetType, ch);                    
            
            if(ch.r!=null){
                                
                while(ch.r.next()){
                                                                                  
                    FotografiaModel foto = new FotografiaModel(ch.r.getInt("idFotografia"),PATH_FOTOS_LOCATION + "pratos\\" + ch.r.getString("localizacao"),ch.r.getString("emailutilizador"),ch.r.getString("nome"));
                    ret.add(foto);

                }
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return ret;
        
    }
    
    public List<FotografiaModel> getFotosEstabelecimento(int id_estabelecimento){
        
        List<FotografiaModel> ret = new LinkedList<>();
        
        int resultsetType =0;
        ConnectionHandler ch = new ConnectionHandler();
                
        try {
            
            fc.returnResultSetSelectStatement("SELECT f.idFotografia,f.idEstabelecimento,f.idPrato,f.localizacao, f.emailutilizador, u.nome FROM Fotografia f inner join Utilizador u on u.email=f.emailutilizador WHERE f.idEstabelecimento="+ id_estabelecimento, resultsetType, ch);                    
            
            if(ch.r!=null){
                                
                while(ch.r.next()){
                                                                                  
                    FotografiaModel foto = new FotografiaModel(ch.r.getInt("idFotografia"),PATH_FOTOS_LOCATION + "estabelecimentos\\" + ch.r.getString("localizacao"),ch.r.getString("emailutilizador"),ch.r.getString("nome"));
                    ret.add(foto);

                }
            }
            
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return ret;
        
    }
    
    public boolean delete(int id){
        
        ConnectionHandler ch = new ConnectionHandler();
        
        fc.updateStatement("delete Fotografia WHERE idFotografia="+id, ch);
        
        return "1".equals(ch.returnStatus);
        
    }
    
    public boolean adicionarFotoPrato(FotografiaModel foto, String email_user, int id_prato){
               
        ConnectionHandler ch = new ConnectionHandler();
        
        String[] list = foto.getLocalizacao().split("\\\\");
        String nomeFoto = list[list.length-1];
        
        fc.updateStatement("insert into Fotografia VALUES ((SELECT ISNULL(MAX(idFotografia)+1,0) from Fotografia),null,'"+email_user+"',"+id_prato+",'"+nomeFoto+"')", ch);
        
        return "1".equals(ch.returnStatus);
        
    }
    
    public boolean adicionarFotoEstabelecimento(FotografiaModel foto, String email_user, int id_estabelecimento){
                
        ConnectionHandler ch = new ConnectionHandler();
        
        String[] list = foto.getLocalizacao().split("\\\\");
        String nomeFoto = list[list.length-1];
        
        fc.updateStatement("insert into Fotografia VALUES ((SELECT ISNULL(MAX(idFotografia)+1,0) from Fotografia),"+id_estabelecimento+",'"+email_user+"',null,'"+nomeFoto+"')", ch);
        
        return "1".equals(ch.returnStatus);
        
    }
    
    public boolean adicionarFotoPerfil(FotografiaModel foto, String email_user){
                
        ConnectionHandler ch = new ConnectionHandler();
        
        String[] list = foto.getLocalizacao().split("\\\\");
        String nomeFoto = list[list.length-1];
        
        
        FotografiaModel fotoPerfil = getFotoPerfil(email_user);
        
        if(fotoPerfil==null){
            fc.updateStatement("insert into Fotografia VALUES ((SELECT ISNULL(MAX(idFotografia)+1,0) from Fotografia),null,'"+email_user+"',null,'"+nomeFoto+"')", ch);
        }else{
            fc.updateStatement("update Fotografia set localizacao='"+nomeFoto+"' where idFotografia="+fotoPerfil.getId(), ch);
        }

        return "1".equals(ch.returnStatus);
        
    }
    
}
